package com.kaigejava.juc.volatitle;

import java.util.concurrent.TimeUnit;

/**
 * @author kaigejava
 * 验证volatile可见性之
 * 说明：有两个线程。分别是：main线程和线程名字为A的线程
 *验办法：
 * 共享变量先不用volatile关键字修饰
 */

public class VolatitleDemo11 {
    public static void main(String[] args) {
        MyNumber myNumber = new MyNumber();
        //第二个线程名字为A的开始执行
        new Thread(()->{
            System.out.println(Thread.currentThread().getName()+"\t 进入了。准备操作数据" );
            //睡3s
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            myNumber.addNumber();;
            System.out.println(Thread.currentThread().getName()+"\t 更新数据完成。更新后的值为:" +myNumber.number);
        },"线程A").start();
        //主线程Main接着执行
        while (myNumber.number == 0){
            //如果numbe的值还是0的话，就一致死循环再这里
        }
        System.out.println("=============="+Thread.currentThread().getName()+"====运行结束.主线程Main获取到的值为:"+myNumber.number);
    }
}

/**
 * 内部类
 */
class MyNumber {
    //int  number = 0;
    //修改number为volatile
    volatile int number = 0;
    public void addNumber(){
        this.number =  100;
    }
}